<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('ability_dimensions', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 基本信息
            $table->string('name', 100); // 维度名称
            $table->string('code', 50)->unique(); // 维度编码
            $table->text('description')->nullable(); // 描述
            $table->string('category', 50)->nullable(); // 分类：professional, leadership, communication, etc.

            // 配置信息
            $table->integer('weight')->default(1); // 权重
            $table->integer('max_score')->default(100); // 最高分
            $table->integer('min_score')->default(0); // 最低分
            $table->string('score_type', 20)->default('numeric'); // 评分类型：numeric, grade, level

            // 等级定义（JSON格式）
            $table->json('score_levels')->nullable(); // 评分等级：[{"level": "A", "min_score": 90, "max_score": 100}, ...]

            // 适用岗位类型
            $table->json('applicable_positions')->nullable(); // 适用的岗位类型

            // 评价标准
            $table->text('evaluation_criteria')->nullable(); // 评价标准
            $table->json('evaluation_examples')->nullable(); // 评价示例

            // 状态信息
            $table->boolean('is_active')->default(true); // 是否启用
            $table->integer('sort_order')->default(0); // 排序
            $table->boolean('is_required')->default(true); // 是否必评

            // 统计信息
            $table->integer('usage_count')->default(0); // 使用次数
            $table->decimal('average_score', 5, 2)->nullable(); // 平均分

            // 索引
            $table->index(['code']);
            $table->index(['category']);
            $table->index(['is_active']);
            $table->index(['is_required']);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('ability_dimensions');
    }
};
